#include "systick.h"

#define rSysTickLoad *((volatile unsigned long *)0xE000E014)
#define rSysTickVal *((volatile unsigned long *)0xE000E018)

// void systick_cfg()
// {
// 	rSysTickCtrl = 0;
// 	rSysTickLoad = 167999;
// 	rSysTickVal = 0;

// 	rSysTickCtrl |= (1 << 2) | (1 << 1);
// 	rSysTickCtrl |= (1 << 0);
// }

uint32_t systicknum = 0;
// 配合main.c的一个状态量
// uint8_t status = 0;

// 中断处理函数
void SysTick_Handler(void)
{
	if (systicknum != 0)
	{
		systicknum--;
	}
}

// uint32_t SystemCoreClock = 168000000; // 168M
void Delay_ms(uint32_t d)
{
	// 系统固件库函数调用
	SysTick_Config(SystemCoreClock / 1000); // 每1ms触发一次中断
	systicknum = d;

	while (systicknum != 0)
		;
	// status = 1;
	rSysTickCtrl &= ~(1 << 0); //关闭时钟中断使能
}

void Delay_us(uint32_t d)
{
	// 系统固件库函数调用
	SysTick_Config(SystemCoreClock / 1000000);
	systicknum = d;
	while (systicknum != 0)
		;
	rSysTickCtrl &= ~(1 << 0);
}
